home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / cli / cliutils_mra.lha / Sources / DFree / DFree2.a < prev   
Encoding:
Text File  |  1997-06-17  |  4.3 KB  |  195 lines

  1. ;
  2. ; $VER: DFree.a V1.2 recoded in 100% assembly
  3. ;
  4. ; Started: 03/07/1996 (month/day/year)
  5. ;
  6. ; Original by Max Francis, coded in C (6200 bytes!)
  7. ; USAGE: dfree <device/name>
  8. ;
  9. ; 100% assembly recoded version by Mauro Panigada (FREEWARE)
  10. ; USAGE: dfree <device/name>
  11. ;
  12. ; Added ReadArgs parser with: DEVICE/A
  13. ; Shorter than previous my own assembly version and better:
  14. ; autorelocable and can be a resident program (pure).
  15. ;
  16. ; STORY: DFree V1.0 (02/12/1996) simply a remake from C version.
  17. ;        DFree V1.2 (03/07/1996) see before.
  18. ;
  19. ; GOOD QUALITY: Differently from shorter DSpace V1.2 (freeware), DFree
  20. ; works with 68000 (no odd addresses, and uses utility.library for
  21. ; 32bit operations and not the 68020 mulu.l istruction), and it
  22. ; calculate the best method to rapresent the free space (bytes, Kilo or
  23. ; Mega). Is it enough?
  24. ; It is now PURE, you can make it RESIDENT!
  25. ;
  26.  
  27.         incdir    "dh0:progr/assem/include/"
  28.         include    "exec/types.i"
  29.         include    "exec/memory.i"
  30.         include    "exec/libraries.i"
  31.         include    "exec/exec_lib.i"
  32.         include    "dos/dos.i"
  33.         include    "dos/dosextens.i"
  34.         include    "dos/dos_lib.i"
  35.         include    "utility/utility_lib.i"
  36.  
  37.  
  38.         bra.s    start
  39.  
  40.         dc.b    "$VER: DFree V1.2 recoded in 100% assembly "
  41.         dc.b    "by Mauro Panigada",0
  42.         even
  43.  
  44. LIBVERSION    EQU    37
  45.  
  46. dosbase        EQU    0
  47. utilbase    EQU    dosbase+4
  48. rdargs        EQU    utilbase+4
  49. array        EQU    rdargs+4
  50. sarg        EQU    array+4
  51. targ        EQU    sarg+4
  52. idstruct    EQU    targ+4
  53. myarg        EQU    idstruct+id_SIZEOF
  54. VARSLEN        EQU    myarg+4
  55.  
  56. start        moveq    #0,d7
  57.         move.l    4.w,a6
  58.         moveq    #VARSLEN,d0
  59.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  60.         jsr    _LVOAllocVec(a6)
  61.         move.l    d0,a5
  62.         tst.l    d0
  63.         beq    exit0
  64.         lea    dosname(pc),a1
  65.         moveq    #LIBVERSION,d0
  66.         jsr    _LVOOpenLibrary(a6)
  67.         move.l    d0,dosbase(a5)
  68.         beq    exit
  69. vaicosi        lea    utilname(pc),a1
  70.         moveq    #LIBVERSION,d0
  71.         jsr    _LVOOpenLibrary(a6)
  72.         move.l    d0,utilbase(a5)
  73.         beq    exit
  74.         move.l    dosbase(a5),a6
  75.         lea    linepars(pc),a0
  76.         move.l    a0,d1
  77.         lea    array(a5),a0
  78.         move.l    a0,d2
  79.         moveq    #0,d3
  80.         jsr    _LVOReadArgs(a6)
  81.         move.l    d0,rdargs(a5)
  82.         beq    helpscreen
  83.         move.l    array(a5),d0
  84.         beq    helpscreen
  85.         move.l    array(a5),d1
  86.         moveq    #ACCESS_READ,d2
  87.         jsr    _LVOLock(a6)
  88.         move.l    d0,d7
  89.         beq    lockerror
  90.         lea    idstruct(a5),a0
  91.         move.l    a0,d2
  92.         move.l    d0,d1
  93.         jsr    _LVOInfo(a6)
  94.         tst.l    d0
  95.         beq    infoerror
  96.         lea    idstruct(a5),a4
  97.         move.l    id_NumBlocks(a4),d3
  98.         move.l    id_NumBlocksUsed(a4),d4
  99.         move.l    id_BytesPerBlock(a4),d5
  100.         sub.l    d4,d3
  101.         move.l    utilbase(a5),a6
  102.         move.l    d3,d0
  103.         move.l    d5,d1
  104.         jsr    _LVOUMult32(a6)
  105.         move.l    dosbase(a5),a6
  106.         move.l    d0,d6
  107.         lea    targ(a5),a0
  108.         cmp.l    #(5*1048576),d6
  109.         bhi    megafree
  110.         cmp.l    #1024,d6
  111.         blo    bytefree
  112. kappafree    lea    kappa.msg(pc),a1
  113.         move.l    a1,(a0)
  114.         move.l    d6,d0
  115.         move.l    #1024,d1
  116.         bra.s    shwrite0
  117. bytefree    lea    byte.msg(pc),a1
  118.         move.l    a1,(a0)
  119.         bra.s    shwrite
  120. megafree    lea    mega.msg(pc),a1
  121.         move.l    a1,(a0)
  122.         move.l    #1048576,d1
  123. shwrite0    move.l    utilbase(a5),a6
  124.         move.l    d6,d0
  125.         jsr    _LVOUDivMod32(a6)
  126.         move.l    d0,d6
  127.         move.l    dosbase(a5),a6
  128. shwrite        lea    sarg(a5),a0
  129.         move.l    d6,(a0)
  130.         lea    string(pc),a0
  131.         move.l    a0,d1
  132.         lea    array(a5),a0
  133.         move.l    a0,d2
  134.         jsr    _LVOVPrintf(a6)
  135. exit        move.l    d7,d1
  136.         beq.s    closenext1
  137.         jsr    _LVOUnLock(a6)
  138. closenext1    move.l    rdargs(a5),d1
  139.         beq.s    closenext2
  140.         jsr    _LVOFreeArgs(a6)
  141. closenext2    move.l    dosbase(a6),a1
  142.         movea.l    4.w,a6
  143.         jsr    _LVOCloseLibrary(a6)
  144.         move.l    utilbase(a6),a1
  145.         jsr    _LVOCloseLibrary(a6)
  146.         move.l    a5,a1
  147.         jsr    _LVOFreeVec(a6)
  148. exit0        rts
  149.  
  150. helpscreen    lea    help.msg(pc),a0
  151.         lea    myarg(a5),a1
  152.         lea    arg.msg(pc),a2
  153.         move.l    a2,(a1)
  154.         move.l    a1,d2
  155. writerror    move.l    a0,d1
  156.         jsr    _LVOVPrintf(a6)
  157.         bra    exit
  158.  
  159. lockerror    lea    lock.msg(pc),a0
  160.         lea    array(a5),a1
  161.         move.l    a1,d2
  162.         bra.s    writerror
  163.  
  164. infoerror    lea    info.msg(pc),a0
  165.         lea    array(a5),a1
  166.         move.l    a1,d2
  167.         bra.s    writerror
  168.  
  169. ;--------------------------------------------------------------------------
  170. dosname        dc.b    "dos.library",0
  171.         even
  172. utilname    dc.b    "utility.library",0
  173.         even
  174. help.msg    dc.b    "DFree V1.2 recoded in 100%% assembly"
  175.         dc.b    " by Mauro Panigada (03/07/1996)",10
  176.         dc.b    "Original version coded in C by Max Francis",10
  177.         dc.b    "USAGE: %s <DEVICE/DISK>",10
  178.         dc.b    "Show free disk space on DEVICE or DISK "
  179.         dc.b    "specified.",10,0
  180.         even
  181. lock.msg    dc.b    "Can't lock %s",10,0
  182.         even
  183. info.msg    dc.b    "Can't examine %s",10,0
  184.         even
  185. arg.msg        dc.b    "DFree",0
  186.         even
  187. string        dc.b    "%s %ld%s free.",10,0
  188.         even
  189. byte.msg    dc.b    " bytes",0
  190.         even
  191. mega.msg    dc.b    "M",0
  192. kappa.msg    dc.b    "K",0
  193. linepars    dc.b    "DEVICE/A",0
  194.  
  195.         END